#Fig.2
library(readxl)
library(dplyr)
library(lme4)
library(lmerTest)
library(ggeffects)
library(ggplot2)
#MAT
rrdata <- as.data.frame(read_excel("Source Data_Fig. 2.xlsx", sheet = "Fig. 2a"))
rrdata <- rrdata %>%
  dplyr::select(Site, Species, Mycorrhizal_types, MAT, Exudation) %>%
  na.omit()
rrdata$Mycorrhizal_types <- factor(rrdata$Mycorrhizal_types, levels = c("AM", "ECM"))
rrdata$Site <- factor(rrdata$Site)
rrdata$Species <- factor(rrdata$Species)

rrdata$MAT_scaled <- as.numeric(scale(rrdata$MAT))
MAT_mean <- mean(rrdata$MAT)
MAT_sd   <- sd(rrdata$MAT)

md_mat <- lmer(Exudation ~ Mycorrhizal_types * MAT_scaled + (1 | Site:Species), data = rrdata, REML = FALSE)
summary(md_mat)

pred_mat <- ggpredict(md_mat, terms = c("MAT_scaled", "Mycorrhizal_types"))
pred_mat$MAT <- pred_mat$x * MAT_sd + MAT_mean
x0 <- min(pred_mat$MAT) + 0.05 * diff(range(pred_mat$MAT))

p1 <- ggplot() +
  geom_ribbon(data = pred_mat, aes(MAT, ymin = conf.low, ymax = conf.high, fill = group), alpha = 0.25) +
  geom_line(data = pred_mat, aes(MAT, predicted, colour = group), linewidth = 1) +
  geom_point(data = rrdata, aes(MAT, Exudation, fill = Mycorrhizal_types), shape = 21, size = 3, stroke = 0.2, colour = "black") +
  scale_fill_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  scale_colour_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  coord_cartesian(ylim = c(70, 450)) + scale_y_continuous(breaks = c(100, 200, 300, 400)) +
  labs(x = "Mean annual temperature (°C)",
       y = expression(paste("Root exudation rate (", mu, "g C ", g^{-1}, " ", h^{-1}, ")"))) + 
  annotate("text", x = x0, y = 440, hjust = 0, size = 4, parse = TRUE,
           label = "Mycorrhizal~type:~italic(P) < 0.001") +
  annotate("text", x = x0, y = 410, hjust = 0, size = 4, parse = TRUE,
           label = "MAT:~italic(P) < 0.001") +
  annotate("text", x = x0, y = 380, hjust = 0, size = 4, parse = TRUE,
           label = "Type %*% MAT:~italic(P) == 0.036") +
  theme_bw() +
  theme(
    panel.grid = element_blank(),
    axis.title = element_text(size = 16, colour = "black"),
    axis.text  = element_text(size = 13, colour = "black"),
    legend.position = "none",
    panel.border = element_rect(size = 0.9, colour = "black")
  )

print(p1)

library(performance)
r2_vals <- performance::r2(md_mat)
r2_vals

#MAP
rrdata <- as.data.frame(read_excel("Source Data_Fig. 2.xlsx", sheet = "Fig. 2b"))
rrdata <- rrdata %>%
  dplyr::select(Site, Species, Mycorrhizal_types, MAP, Exudation) %>%
  na.omit()
rrdata$Mycorrhizal_types <- factor(rrdata$Mycorrhizal_types, levels = c("AM", "ECM"))
rrdata$Site <- factor(rrdata$Site)
rrdata$Species <- factor(rrdata$Species)

rrdata$MAP_scaled <- as.numeric(scale(rrdata$MAP))
MAP_mean <- mean(rrdata$MAP)
MAP_sd   <- sd(rrdata$MAP)

md_map <- lmer(Exudation ~ Mycorrhizal_types * MAP_scaled + (1 | Site:Species), data = rrdata, REML = FALSE)
summary(md_map)

pred_map <- ggpredict(md_map, terms = c("MAP_scaled", "Mycorrhizal_types"))
pred_map$MAP <- pred_map$x * MAP_sd + MAP_mean
x0 <- min(pred_map$MAP) + 0.05 * diff(range(pred_map$MAP))

p2 <- ggplot() +
  geom_ribbon(data = pred_map, aes(MAP, ymin = conf.low, ymax = conf.high, fill = group), alpha = 0.25, colour = NA) +
  geom_line( data = pred_map, aes(MAP, predicted, colour = group), linewidth = 1) +
  geom_point(data = rrdata, aes(MAP, Exudation, fill = Mycorrhizal_types), shape = 21, size = 3, stroke = 0.2, color = "black") +
  scale_fill_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  scale_colour_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  coord_cartesian(ylim = c(70, 450)) + scale_y_continuous(breaks = c(100, 200, 300, 400)) +
  labs(x = "Mean annual precipitation (mm)",
       y = " ") +
  annotate("text", x = x0, y = 440, hjust = 0, size = 4, parse = TRUE,
           label = "Mycorrhizal~type:~italic(P) < 0.001") +
  annotate("text", x = x0, y = 410, hjust = 0, size = 4, parse = TRUE,
           label = "MAP:~italic(P) < 0.001") +
  annotate("text", x = x0, y = 380, hjust = 0, size = 4, parse = TRUE,
           label = "Type %*% MAP:~italic(P) == 0.022") +
  theme_bw() +
  theme(
    panel.grid = element_blank(),
    axis.title = element_text(size = 16, colour = "black"),
    axis.text  = element_text(size = 13, colour = "black"),
    legend.position = "none",
    panel.border = element_rect(size = 0.9, colour = "black")
  )

print(p2)

r2_vals <- performance::r2(md_map)
r2_vals

#Divergence time
rrdata <- as.data.frame(read_excel("Source Data_Fig. 2.xlsx", sheet = "Fig. 2c"))
rrdata <- rrdata %>%
  dplyr::select(Site, Species, Mycorrhizal_types, Divergence_time, Exudation) %>%
  na.omit()
rrdata$Mycorrhizal_types <- factor(rrdata$Mycorrhizal_types, levels = c("AM", "ECM"))
rrdata$Site <- factor(rrdata$Site)
rrdata$Species <- factor(rrdata$Species)

rrdata$Divergence_time_sqrt <- sqrt(rrdata$Divergence_time)
rrdata$DIV_scaled <- as.numeric(scale(rrdata$Divergence_time_sqrt))
DIV_mean <- mean(rrdata$Divergence_time_sqrt)
DIV_sd   <- sd(rrdata$Divergence_time_sqrt)

md_div <- lmer(Exudation ~ Mycorrhizal_types * DIV_scaled + (1 | Site), data = rrdata, REML = FALSE)
summary(md_div)

pred_div <- ggpredict(md_div, terms = c("DIV_scaled", "Mycorrhizal_types"))
pred_div$DIV <- pred_div$x * DIV_sd + DIV_mean
x0 <- min(pred_div$DIV) + 0.1 * diff(range(pred_div$DIV))

p3 <- ggplot() +
  geom_ribbon(data = pred_div, aes(DIV, ymin = conf.low, ymax = conf.high, fill = group), alpha = 0.25, colour = NA) +
  geom_line(data = pred_div, aes(DIV, predicted, colour = group), linewidth = 1) +
  geom_point(data = rrdata, aes(Divergence_time_sqrt, Exudation, fill = Mycorrhizal_types), shape = 21, size = 3, stroke = 0.2, color = "black") +
  scale_fill_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  scale_colour_manual(values = c(AM = "#F39F4E", ECM = "#98CFE6")) +
  coord_cartesian(ylim = c(70, 450)) +scale_y_continuous(breaks = c(100, 200, 300, 400)) +
  labs(x = "Divergence time (Myr, sqrt)",
       y = " ") +
  annotate("text", x = x0, y = 440, hjust = 0, size = 4, parse = TRUE,
           label = "Mycorrhizal~type:~italic(P) < 0.001") +
  annotate("text", x = x0, y = 410, hjust = 0, size = 4, parse = TRUE,
           label = "Divergence~time:~italic(P) == 0.041") +
  annotate("text", x = x0, y = 380, hjust = 0, size = 4, parse = TRUE,
           label = "Type %*% Divergence~time:~italic(P) == 0.174") +
  theme_bw() +
  theme(
    panel.grid = element_blank(),
    axis.title = element_text(size = 16, colour = "black"),
    axis.text  = element_text(size = 13, colour = "black"),
    legend.position = c(0.85, 0.55),
    legend.title = element_blank(),
    legend.text = element_text(size = 12),
    panel.border = element_rect(size = 0.9, colour = "black")
  )

print(p3)

r2_vals <- performance::r2(md_div)
r2_vals

library(ggpubr)
Fig.2<-ggarrange(p1, p2, p3,
                 ncol =3, nrow = 1,
                 labels = c("a","b","c"), font.label=list(size=24), hjust = -1, vjust = 1) 
Fig.2
ggsave("Fig.2.jpg", Fig.2, units="cm", width=32, height=11, dpi=1000)
